switchroot/remount: Check mount status before remounting, be verbose
authorColin Walters <walters@verbum.org>
Mon, 15 May 2017 17:59:57 +0000 (13:59 -0400)
committerAtomic Bot <atomic-devel@projectatomic.io>
Tue, 16 May 2017 16:13:05 +0000 (16:13 +0000)
By checking the mount status, we avoid remounting things if we don't
need to.  And printing a single line per mount helps debugging when
things go wrong.

Closes: #859
Approved by: jlebon

src/switchroot/ostree-remount.c

index e19de18346374d6869d940810b40cbd2d4e0b3a1..a6d14d08a7365cdff3df82cfc19cd801c25c4992 100644 (file)
@@ -64,6 +64,14 @@ main(int argc, char *argv[])
        */
       if (S_ISLNK (stbuf.st_mode))
         continue;
+      /* If not a mountpoint, skip it */
+      struct statvfs stvfsbuf;
+      if (statvfs (target, &stvfsbuf) == -1)
+        continue;
+      /* If no read-only flag, skip it */
+      if ((stvfsbuf.f_flag & ST_RDONLY) == 0)
+        continue;
+      /* It's a mounted, read-only fs; remount it */
       if (mount (target, target, NULL, MS_REMOUNT | MS_SILENT, NULL) < 0)
         {
           /* Also ignore ENINVAL - if the target isn't a mountpoint
@@ -72,6 +80,8 @@ main(int argc, char *argv[])
           if (errno != EINVAL)
             err (EXIT_FAILURE, "failed to remount %s", target);
         }
+      else
+        printf ("Remounted: %s\n", target);
     }
 
   exit (EXIT_SUCCESS);